package 剑指offer.demo3;
//https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?

/**
 * 快慢指针问题，注意一下边界的细节处理就好了
 */
public class 链表中倒数第k个结点 {
    public ListNode FindKthToTail(ListNode head,int k) {
        //合法性判断
        if (head == null || k <= 0){
            return null;
        }
        //定义一个临时链表进行对比
        ListNode cur = head;
        //先让临时链表把k步走了
        while (k > 0 && cur != null){
            cur = cur.next;
            k--;
        }
        //如果是因为k超出范围跳出来的就返回null
        if (k != 0){
            return null;
        }
        //此时是因为临时链表先走了k步，此时让他们共同进步，当临时链表走到头时此时链表所在位置就是倒数第k个结点
        while (cur != null){
            cur = cur.next;
            head = head.next;
        }
        return head;
    }

    //题目给定链表类
    public class ListNode {
        int val;
        ListNode next = null;

        ListNode(int val) {
            this.val = val;
        }
    }
}
